package com.erp.controller.product;

import com.erp.common.annotation.Anonymous;
import com.erp.common.core.controller.BaseController;
import com.erp.common.core.domain.AjaxResult;
import com.erp.common.core.page.TableDataInfo;
import com.erp.domain.ErpProduct;
import com.erp.domain.oss.AliyunOSSConstants;
import com.erp.service.produtc.IProductService;
import com.erp.utils.oss.AliyunOSSUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * --- 代码敲对！ ---
 *
 * @author CCCccc
 * @create 2025/9/3
 * 备注：商品信息控制层
 */
// 注解表示该类为控制层
@RestController
// 注解表示该类中的所有请求路径都以"/erp/product"开头
@RequestMapping("/erp/product")
public class ProductController extends BaseController {
    // 自动注入
    @Autowired
    private IProductService productService;

    /**
     * 商品信息列表查询
     */
    // 注解表示该请求路径为"/erp/product/list"
    @RequestMapping("/list")
    // 注解表示该请求路径为匿名访问，不需要登录即可访问
    @Anonymous
    public TableDataInfo list(ErpProduct erpProduct) {
        // 调用分页工具类，设置分页参数
        startPage();
        // 调用商品服务层的list方法，返回查询结果
        List<ErpProduct> list = productService.list(erpProduct);
        // 返回查询结果
        return getDataTable(list);
    }

    /**
     * 新增商品信息
     */
    // 注解表示该请求路径为"/erp/product"
    @PostMapping
    // 注解表示该请求路径为匿名访问，不需要登录即可访问
    @Anonymous
    public int add(@RequestBody ErpProduct erpProduct) {
        MultipartFile file = erpProduct.getFile();
        // 使用封装的OSS上传图片
        String avatar = AliyunOSSUtil.upload(file);
        // 删除旧图片
        String oldAvatar = erpProduct.getImageUrl();
        AliyunOSSUtil.delete(oldAvatar);
        // 设置图片路径
        erpProduct.setImageUrl(erpProduct.getProductId() + erpProduct.getProductName() + avatar);
        // 调用商品服务层的add方法，返回添加结果
        return productService.add(erpProduct);
    }

    /**
     * 处理图片的请求
     */
    // 注解表示该请求路径为"/erp/product/upload"
    @PostMapping("/upload")
    // 注解表示该请求路径为匿名访问，不需要登录即可访问
    @Anonymous
    public AjaxResult upload(@RequestParam("file") MultipartFile file) {
        // 使用封装的OSS上传图片
        String avatar = AliyunOSSUtil.upload(file);
        // 返回图片路径
        avatar = "https://" + AliyunOSSConstants.BUCKET_NAME + "." + AliyunOSSConstants.END_POINT + "/" + avatar;
        return AjaxResult.success(avatar);
    }

    /**
     * 删除旧图片
     */
    // 注解表示该请求路径为"/erp/product/delload"
    @PostMapping("/delload")
    // 注解表示该请求路径为匿名访问，不需要登录即可访问
    @Anonymous
    public AjaxResult delload(@RequestBody String oldAvatar) {
        // 删除旧图片
        AliyunOSSUtil.delete(oldAvatar);
        return AjaxResult.success();
    }

    /**
     * 更新商品信息
     */
    // 注解表示该请求路径为"/erp/product"
    @PutMapping
    // // 注解表示该请求路径为匿名访问，不需要登录即可访问
    @Anonymous
    public int update(@RequestBody ErpProduct erpProduct) {
        // 调用商品服务层的update方法，返回更新结果
        return productService.update(erpProduct);
    }
}
